// 文件名：queue_task_dispatch.cpp
// 目的：用 std::queue<Task> 构建简单任务调度器，按 FIFO 顺序执行任务回调。
// 要点：
//   - Task 含 name 与可调用体 fn；
//   - enqueue 使用 std::move 将任务对象入队，减少拷贝；
//   - 出队时使用 std::move(tasks.front()) 取得任务，再 pop；
//   - 适合单线程串行执行；多线程需加锁或换用无锁队列。
// 复杂度：push/pop/front/empty 均摊 O(1)，总执行 O(N)。
#include <functional>
#include <iostream>
#include <queue>
#include <string>
#include <utility>
#include <vector>

struct Task {
    std::string name;
    std::function<void()> fn;
};

int main() {
    std::queue<Task> tasks;

    auto enqueue = [&](Task task) {
        std::cout << "Enqueue task: " << task.name << '\n';
        tasks.push(std::move(task));
    };

    enqueue({"LoadConfig", [] { std::cout << "  loading config...\n"; }});
    enqueue({"WarmupCache", [] { std::cout << "  warming up cache...\n"; }});
    enqueue({"StartService", [] { std::cout << "  starting service...\n"; }});

    while (!tasks.empty()) {
        auto task = std::move(tasks.front());
        tasks.pop();
        std::cout << "Executing task: " << task.name << '\n';
        task.fn();
    }

    return 0;
}